Lambda Function が Java で書けるようになりました!
Lambda Function が Java で書けるようになりました
本日 AWS Lambda にアップデートがあり、Java で書けるようになりました!以前からアナウンスされていましたが、本日からついに使えるようになりました。
ということで、早速 Lambda Function を作ってみました。
AWS Toolkit for Eclipse のインストール
Lambda Function は AWS Toolkit for Eclipse を利用すると簡単に実装できます。今回は現時点の最新バージョンである Eclipse IDE for Java Developers Luna Service Release 2 (4.4.2) を使いました。
AWS Toolkit for Eclipse は次のような手順でインストールします。
- [ヘルプ] > [新しいソフトウェアをインストール] を開く
- [機能するソフトウェア] のテキストボックスに
http://aws.amazon.com/jp/eclipse
を入力 - 「AWS Toolkit for Eclipse」を選択
- インストールして再起動
AWS Lambda Java Project の作成
準備が整ったので AWS Lambda Java Project を作成します。AWS Toolkit for Eclipse をインストールしたあと、ツールバーに AWS アイコンが表示されていると思います。アイコンをクリックして表示されるメニューから「New AWS Lambda Java Project...」を選択します。
プロジェクト名、パッケージ名、クラス名、イベントの種類、出力形式のクラスを指定します。今回は SNS Event を選択しました。
作成したプロジェクト構成はこんな感じです。
以下のような Lambda Function のソースコードが自動生成されます。なお、イベントの種類によって引数が異なってきます。JDK 8 で実行されるので、Java 8 の機能が利用できます。
package jp.classmethod.sample.lambda; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SNSEvent; public class LambdaFunctionHandler implements RequestHandler<SNSEvent, Object> { @Override public Object handleRequest(SNSEvent input, Context context) { context.getLogger().log("Input: " + input); // TODO: implement your handler return null; } }
ユニットテストのサンプル付き。これは非常に有難いです!
package jp.classmethod.sample.lambda; import java.io.IOException; import org.junit.BeforeClass; import org.junit.Test; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.SNSEvent; /** * A simple test harness for locally invoking your Lambda function handler. */ public class LambdaFunctionHandlerTest { private static SNSEvent input; @BeforeClass public static void createInput() throws IOException { input = TestUtils.parse("sns-event.json", SNSEvent.class); } private Context createContext() { TestContext ctx = new TestContext(); // TODO: customize your context here if needed. ctx.setFunctionName("Your Function Name"); return ctx; } @Test public void testLambdaFunctionHandler() { LambdaFunctionHandler handler = new LambdaFunctionHandler(); Context ctx = createContext(); Object output = handler.handleRequest(input, ctx); // TODO: validate output here if needed. if (output != null) { System.out.println(output.toString()); } } }
Lambda Function のアップロード
とりあえずこのままアップロードしてみましょう。プロジェクトを右クリックすると表示されるコンテキストメニューから「Upload function to AWS Lambda...」を選択します。
リージョンとファンクション名を設定します。
説明、Lambda Function のクラス、IAM Role、S3 バケット、メモリサイズとタイムアウト時間を設定します。
以上で完了です。マネジメントコンソールを開くと、アップロードされていると思います!
Lambda Function をテストする
あとはマネジメントコンソールから今までと同じように Sample event を使ったテストが行えます。
JUnit を使ったテストも行えます!通信が発生しないテストが書きやすいのは嬉しいですね。
まとめ
いままでは JavaScript だけでしたが、Java が使えるようになったことでより多くのデベロッパーが Lambda を使うようになるでしょう。先日 CFn も対応したので、ますます使いやすくなってきている印象です。これからも Lambda ちゃんに期待ですね!!